egl: Set the draw buffer to GL_BACK_LEFT
authorBenjamin Otte <otte@redhat.com>
Wed, 3 Nov 2021 18:49:57 +0000 (19:49 +0100)
committerBenjamin Otte <otte@redhat.com>
Wed, 3 Nov 2021 21:53:59 +0000 (22:53 +0100)
Instead of using GL_BACK, use GL_BACK_LEFT, because the spec demands
this (many drivers don't).

Also move the call from the GDK backends into the GLContext code, as
this is a generic EGL issue (nvidia being the main driver in need of
this call, see 9c4c4eaaa121d784f591a591b95264647eaece96 for a longer
discussion).

Fixes #4402

gdk/gdkglcontext.c
gdk/wayland/gdkglcontext-wayland.c
gdk/x11/gdkglcontext-egl.c

index 422e0a189e2055956b8a25814acfab2ecd3a404c..a768a8c0424e237b3841a4991b94c775cf3a0c8f 100644 (file)
@@ -572,6 +572,11 @@ gdk_gl_context_real_begin_frame (GdkDrawContext *draw_context,
   glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
 
   glViewport (0, 0, ww, wh);
+
+#ifdef HAVE_EGL
+  if (priv->egl_context)
+    glDrawBuffers (1, (GLenum[1]) { GL_BACK_LEFT });
+#endif
 }
 
 static void
index d631816286e0858800087f650df460241d008f6c..a7a51c535f1c26c4757e0d5478974365662162ef 100644 (file)
@@ -53,8 +53,6 @@ gdk_wayland_gl_context_begin_frame (GdkDrawContext *draw_context,
   gdk_wayland_surface_ensure_wl_egl_window (gdk_draw_context_get_surface (draw_context));
 
   GDK_DRAW_CONTEXT_CLASS (gdk_wayland_gl_context_parent_class)->begin_frame (draw_context, prefers_high_depth, region);
-
-  glDrawBuffers (1, (GLenum[1]) { GL_BACK });
 }
 
 static void
index 67d730fcfb7fc6ec29868529160f1d2b75e50b56..6a6bf9a08b448a426600e3a66b5fbb3171f46034 100644 (file)
@@ -59,16 +59,6 @@ gdk_x11_display_get_egl_display (GdkDisplay *display)
   return gdk_display_get_egl_display (display);
 }
 
-static void
-gdk_x11_gl_context_egl_begin_frame (GdkDrawContext *draw_context,
-                                    gboolean        prefers_high_depth,
-                                    cairo_region_t *region)
-{
-  GDK_DRAW_CONTEXT_CLASS (gdk_x11_gl_context_egl_parent_class)->begin_frame (draw_context, prefers_high_depth, region);
-
-  glDrawBuffers (1, (GLenum[1]) { GL_BACK });
-}
-
 static gboolean
 gdk_x11_gl_context_egl_make_current (GdkGLContext *context,
                                      gboolean      surfaceless)
@@ -107,13 +97,10 @@ static void
 gdk_x11_gl_context_egl_class_init (GdkX11GLContextEGLClass *klass)
 {
   GdkGLContextClass *context_class = GDK_GL_CONTEXT_CLASS (klass);
-  GdkDrawContextClass *draw_context_class = GDK_DRAW_CONTEXT_CLASS (klass);
 
   context_class->backend_type = GDK_GL_EGL;
 
   context_class->make_current = gdk_x11_gl_context_egl_make_current;
-
-  draw_context_class->begin_frame = gdk_x11_gl_context_egl_begin_frame;
 }
 
 static void